﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entity;
using DAL;
using Helper;
using Entity;

namespace geoSchools.Conta
{
    public partial class escola : System.Web.UI.Page
    {
        Endereco EndEntity = new Endereco();
        EnderecoWrapper EndWrapper = new EnderecoWrapper();
        Usuario UserEntity = new Usuario();
        UsuarioWrapper UserWrapper = new UsuarioWrapper();
        Escola SchoolEntity = new Escola();
        EscolaWrapper SchoolWrapper = new EscolaWrapper();
        Contato ContatoEntity = new Contato();
        ContatoWrapper ContatoWrapper = new ContatoWrapper();
        Cidade CityEntity = new Cidade();
        CidadeWrapper CityWrapper = new CidadeWrapper();
        Estado EEntity = new Estado();
        EstadoWrapper EWrapper = new EstadoWrapper();

        bool SalvarCidade = false;
        bool SalvarNovoUser = false;
        bool SalvarNovoEndereco = false;
        bool SalvarNovoEscola = false;
        bool SalvarNovoContato = false;
        bool isEditing = false;



        protected void Page_Load(object sender, EventArgs e)
        {

             UserEntity.TIPOUSUARIO = true;
            if (!IsPostBack)
            {
                if (Request.QueryString["idUsuario"] != null)
                {
                    try
                    {
                        UserEntity.IDUSUARIO = int.Parse(Request.QueryString["idUsuario"].ToString());
                    }
                    catch
                    {
                        Alert.jAlert(this, "idUsuario Inválido");
                        return;
                    }

                    LoadControl();
                    CarregarInformacao();
                    CarregarMapa();
                    CarregarContato();
                    pnlTabs.Visible = true;
                }

                else
                {
                    LoadControl();
                    pnlTabs.Visible = false;
                }

            }



            if (Request.QueryString["idUsuario"] != null)
            {
                isEditing = true;
            }

        }

        private void CarregarContato()
        {
            gridContato.DataSource = ContatoWrapper.GetGrid(UserEntity.IDUSUARIO);
            gridContato.DataBind();
        }

        private void CarregarInformacao()
        {
            UserEntity = UserWrapper.GetById(UserEntity.IDUSUARIO);
            SchoolEntity = SchoolWrapper.GetByIdUsuario(UserEntity.IDUSUARIO);
            EndEntity = EndWrapper.GetByIdEscola(SchoolEntity.IDESCOLA);
            CityEntity = CityWrapper.GetByIdEndereco(EndEntity.IDENDERECO);
            EEntity = EWrapper.GetById(CityEntity.IDESTADO);

            txtEstado.Text = EEntity.SIGLA;
            txtEmail.Text = UserEntity.EMAIL;
            txtSenha.Text = UserEntity.SENHA;
            txtSenhaConfirmar.Text = txtSenha.Text;
            txtNome.Text = SchoolEntity.NOME;
            txtCNPJ.Text = SchoolEntity.CNPJ;
            txtEstado.Text = EEntity.SIGLA;
            txtCidade.Text = CityEntity.NOME;
            txtCEP.Text = EndEntity.CEP;
            txtBairro.Text = EndEntity.BAIRRO;
            txtLogradouro.Text = EndEntity.LOGRADOURO;
            txtCidade.Text = CityEntity.NOME;
            txtComplemento.Text = EndEntity.COMPLEMENTO;
            txtLatitude.Text = EndEntity.LATITUDE;
            txtLongitude.Text = EndEntity.LONGITUDE;
            txtNumero.Text = EndEntity.NUMERO;
            CarregarMapa();
        }

        private void LoadControl()
        {
            PopulateDropDown.EnumToListBox(typeof(TipoEscolaEnum), ltbEscola);

        }

        protected void btnBuscarCEP_Click(object sender, EventArgs e)
        {
            EndEntity = Helper.CEP.Endereco(txtCEP.Text);

            txtLogradouro.Text = EndEntity.LOGRADOURO;
            txtBairro.Text = EndEntity.BAIRRO;
            txtCidade.Text = EndEntity.CidadeNome;
            txtEstado.Text = (EndEntity.UF);
            CarregarMapa();


        }

        private void CarregarMapa()
        {

            ScriptManager.RegisterStartupScript(this, this.GetType(), "centerMap", " jQuery(function ($) { codeAddress('" + EndEntity.EnderecoCompleto + "',15); }); ", true);

        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {


            if (isEditing)
            {
                UserEntity.IDUSUARIO = int.Parse(Request.QueryString["idUsuario"].ToString());
                UserEntity = UserWrapper.GetById(UserEntity.IDUSUARIO);
                SchoolEntity = SchoolWrapper.GetByIdUsuario(UserEntity.IDUSUARIO);
                EndEntity = EndWrapper.GetByIdEscola(SchoolEntity.IDESCOLA);
                CityEntity = CityWrapper.GetByIdEndereco(EndEntity.IDENDERECO);
                EEntity = EWrapper.GetById(CityEntity.IDESTADO);
            }
            #region ///ValidarUsuario
            if (!string.IsNullOrEmpty(txtEmail.Text))
                UserEntity.EMAIL = txtEmail.Text;
            else
            {
                Alert.jAlert(this, "Insira um email.");
                return;
            }
            if (!string.IsNullOrEmpty(txtSenha.Text))
                UserEntity.SENHA = txtSenha.Text;
            else
            {
                Alert.jAlert(this, "Insira uma senha.");
                return;
            }
            if (!string.IsNullOrEmpty(txtSenhaConfirmar.Text))
                if (txtSenha.Text != txtSenhaConfirmar.Text)
                {
                    Alert.jAlert(this, "Confirmação de senha inválida. Insira novamente.");
                    return;
                }
                else
                {
                    if (!isEditing)
                    {
                        SalvarNovoUser = true;
                    }


                }
            #endregion
            #region ///SalvarUsuario

            if (SalvarNovoUser == true)
            {
                if (!UserWrapper.Insert(UserEntity))
                {
                    Alert.jAlert(this, "Erro na inserção do usuario");
                    return;

                }

            }
            else
            {
                if (!UserWrapper.Update(UserEntity))
                {
                    Alert.jAlert(this, "Erro na inserção do usuario");
                    return;

                }


            }
            #endregion
            #region ///ValidarCidade

            if (!string.IsNullOrEmpty(txtEstado.Text))
                CityEntity.IDESTADO = EndWrapper.GetEstadoBySigla(txtEstado.Text);
            else
            {
                Alert.jAlert(this, "Informe o estado.");
                return;
            }

            if (!string.IsNullOrEmpty(txtCidade.Text))
                CityEntity.NOME = txtCidade.Text;
            else
            {
                Alert.jAlert(this, "Informe a cidade.");
                return;
            }

            if (!isEditing)
                SalvarCidade = true;


            #endregion
            #region ///SalvarCidade

            if (SalvarCidade == true)
            {
                if (!CityWrapper.Insert(CityEntity))
                {
                    UserWrapper.Delete(UserEntity);
                    Alert.jAlert(this, "Erro na inserção da cidade");
                    return;

                }

            }
            else
            {
                if (!CityWrapper.Update(CityEntity))
                {
                    Alert.jAlert(this, "Erro na inserção da cidade");
                    return;

                }


            }
            #endregion
            #region ///ValidarEndereco

            if (!string.IsNullOrEmpty(txtCEP.Text))
            {
                EndEntity.CEP = txtCEP.Text;
            }
            else
            {
                UserWrapper.Delete(UserEntity);
                CityWrapper.Delete(CityEntity);
                Alert.jAlert(this, "Insira seu CEP.");
                return;
            }
            if (!string.IsNullOrEmpty(txtLogradouro.Text))
                EndEntity.LOGRADOURO = txtLogradouro.Text;
            else
            {
                UserWrapper.Delete(UserEntity);
                CityWrapper.Delete(CityEntity);
                Alert.jAlert(this, "Insira seu Logradouro.");
                return;
            }

            if (!string.IsNullOrEmpty(txtNumero.Text))
                EndEntity.NUMERO = txtNumero.Text;
            else
            {
                UserWrapper.Delete(UserEntity);
                CityWrapper.Delete(CityEntity);
                Alert.jAlert(this, "Insira o número de seu endereço.");
                return;
            }

            if (!string.IsNullOrEmpty(txtBairro.Text))
            {

                EndEntity.BAIRRO = txtBairro.Text;
            }
            else
            {
                UserWrapper.Delete(UserEntity);
                CityWrapper.Delete(CityEntity);
                Alert.jAlert(this, "Insira o bairro.");
                return;
            }
            if (CityEntity.IDCIDADE != 0)
                EndEntity.IDCIDADE = CityEntity.IDCIDADE;

            if (!string.IsNullOrEmpty(txtLatitude.Text))
                EndEntity.LATITUDE = txtLatitude.Text;
            else
            {
               
                    UserWrapper.Delete(UserEntity);
                    CityWrapper.Delete(CityEntity);
                    Alert.jAlert(this, "Latitude invalida.");
                    return;
                


            }

            if (!string.IsNullOrEmpty(txtLongitude.Text))
                EndEntity.LONGITUDE = txtLongitude.Text;
          
                else
                {
                    UserWrapper.Delete(UserEntity);
                    CityWrapper.Delete(CityEntity);
                    Alert.jAlert(this, "Longitude invalida.");
                    return;
                }

           

            EndEntity.COMPLEMENTO = txtComplemento.Text;

            if (!isEditing)
                SalvarNovoEndereco = true;

            #endregion
            #region ///SalvarEndereco

            if (SalvarNovoEndereco == true)
            {
                if (!EndWrapper.Insert(EndEntity))
                {
                    UserWrapper.Delete(UserEntity);
                    CityWrapper.Delete(CityEntity);
                    Alert.jAlert(this, "Erro na inserção do endereço");
                    return;

                }

            }
            else
            {
                if (!EndWrapper.Update(EndEntity))
                {
                    Alert.jAlert(this, "Erro na inserção do endereço");
                    return;

                }

            }
            #endregion
            #region ///ValidarEscola
            if (!string.IsNullOrEmpty(txtNome.Text))
                SchoolEntity.NOME = txtNome.Text;
            else
            {
                UserWrapper.Delete(UserEntity);
                CityWrapper.Delete(CityEntity);
                EndWrapper.Delete(EndEntity);
                Alert.jAlert(this, "Insira seu Nome.");
                return;
            }

            if (!string.IsNullOrEmpty(txtCNPJ.Text))
                SchoolEntity.CNPJ = txtCNPJ.Text;
            else
            {
                UserWrapper.Delete(UserEntity);
                CityWrapper.Delete(CityEntity);
                EndWrapper.Delete(EndEntity);
                Alert.jAlert(this, "Insira seu CNPJ.");
                return;
            }

            SchoolEntity.TIPOESCOLA = null;
            foreach (var item in ltbEscola.SelectedValue)
            {
                SchoolEntity.TIPOESCOLA += item.ToString();
            }

            if (string.IsNullOrEmpty(SchoolEntity.TIPOESCOLA))
            {
                UserWrapper.Delete(UserEntity);
                CityWrapper.Delete(CityEntity);
                EndWrapper.Delete(EndEntity);
                Alert.jAlert(this, "Insira o tipo de escola.");
                return;
            }

            if (!isEditing)
                SalvarNovoEscola = true;
            #endregion
            #region ///SalvarEscola
            SchoolEntity.IDUSUARIO = UserEntity.IDUSUARIO;
            SchoolEntity.IDENDERECO = EndEntity.IDENDERECO;

            if (SalvarNovoEscola)
            {
                if (!SchoolWrapper.Insert(SchoolEntity))
                {
                    UserWrapper.Delete(UserEntity);
                    CityWrapper.Delete(CityEntity);
                    EndWrapper.Delete(EndEntity);
                    Alert.jAlert(this, "Erro ao inserir Escola.");
                    return;

                }
                else
                {
                    Alert.jAlert(this, "Inserção feita com sucesso");
                }
            }
            else
            {
                if (!SchoolWrapper.Update(SchoolEntity))
                {
                    Alert.jAlert(this, "Erro ao inserir Escola.");
                    return;

                }
                else
                {
                    Alert.jAlert(this, "Atualização feita com sucesso.");
                }
            }

            #endregion

            SetUrlParameters();




        }

        protected void SetUrlParameters()
        {
            string urlparameters = null;
            if (UserEntity.IDUSUARIO != 0)
            {
                urlparameters += "?idUsuario=" + UserEntity.IDUSUARIO.ToString();
                Response.Redirect("~/Escola.aspx" + urlparameters);

            }
        }

        protected void ExcluirTelefone(object sender, GridViewDeleteEventArgs e)
        {
            int idToDelete = 0;
            int.TryParse(((HiddenField)gridContato.Rows[e.RowIndex].FindControl("idContato")).Value, out idToDelete);
            ContatoEntity.IDCONTATO = idToDelete;

            if (!ContatoWrapper.Delete(ContatoEntity))
                Alert.jAlert(this, "Erro ao excluir contato.");


        }

        protected void btnSalvarTelefone_Click(object sender, EventArgs e)
        {

            UserEntity.IDUSUARIO = int.Parse(Request.QueryString["idUsuario"].ToString());
            ContatoEntity.IDUSUARIO = UserEntity.IDUSUARIO;

            if (!string.IsNullOrEmpty(txtDDD.Text))
                ContatoEntity.DDD = txtDDD.Text;
            else
            {
                Alert.jAlert(this, "Insira o DDD");
                return;
            }


            if (!string.IsNullOrEmpty(txtNumeroContato.Text))
                ContatoEntity.TELEFONE = txtNumeroContato.Text;
            else
            {
                Alert.jAlert(this, "Insira o Número de telefone");
                return;
            }


            if (!string.IsNullOrEmpty(txtRamal.Text))
                ContatoEntity.RAMAL = txtRamal.Text;

            if (!ContatoWrapper.Insert(ContatoEntity))
            {
                Alert.jAlert(this, "Erro");
                return;

            }
            else
            {
                Alert.jAlert(this, "Telefone inserido com sucesso");
                CarregarContato();

            }
        }

        protected void btnAtualizar_Click(object sender, EventArgs e)
        {
            EndEntity = Helper.CEP.Endereco(txtCEP.Text);
            EndEntity.NUMERO = txtNumero.Text;
            CarregarMapa();
        }

    }
}